/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   5.max.c                                            :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: chen_dl <19967657938@163.com>              +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2025/01/17 13:20:16 by chen_dl           #+#    #+#             */
/*   Updated: 2025/01/17 13:48:16 by chen_dl          ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

/*
请实现一个没有 BUG 的 MAX 宏，需要通过如下测试：

1、MAX(2, 3)
2、5 + MAX(2, 3)
3、MAX(2, MAX(3, 4))
4、MAX(2, 3 > 4 ? 3 : 4)
5、MAX(a++, 6) a 的初值为7，返回值为7，a 的值变为8
*/

#include <stdio.h>

#define TEST(func)                                                             \
    { printf("TEST: %s = %d\n", #func, func); }

#define MAX(a, b)                                                              \
    ({                                                                         \
        int __a = (a), __b = (b);                                              \
        __a > __b ? __a : __b;                                                 \
    })
//在大括号前面加一个小括号，表示该代码段具有返回值，返回值是最后一行

int main() {
    TEST(MAX(2, 3));
    TEST(5 + MAX(2, 3));
    TEST(MAX(2, MAX(3, 4)));
    TEST(MAX(2, 3 > 4 ? 3 : 4));
    //要将a和b区分出来才能得到正确的结果

    int a = 7;
    TEST(MAX(a++, 6));
    printf("after max a = %d\n", a);
    return 0;
}